def check(x, group):
    # 判断学生能否加入group中
    for y in group:
        if x % y == 0 or y % x == 0:
            return False
    return True


def dfs(depth):
    global ans
    # 最优性剪枝
    # 如果当前分组策略已经比ans大，则当前分组策略肯定不行
    if len(Groups) > ans:
        return
    if depth == n:
        ans = min(ans, len(Groups))
        return

        # 对每个学生，枚举将学生放到哪个组
    for every_group in Groups:
        # 当前depth个学生能否加入当前组
        # 可行性剪枝
        if check(a[depth], every_group):
            every_group.append(a[depth])
            dfs(depth + 1)
            every_group.pop()

    # 对于每个学生也可以单独作为一组
    Groups.append([a[depth]])
    dfs(depth + 1)
    Groups.pop()


n = int(input())
a = list(map(int, input().split()))
Groups = []
ans = n
dfs(0)
print(ans)
